
/*
 * WBS画面内で行う処理
 */

/**
 * WBS一覧を取得すると同時に選択中のプロジェクトの情報を表示する
 */
public function loadWbs():void
{
    _projects.connect(_databaseFile);
    //displayWbs(_projects.loadWbs(_currentProjectId));
    displayWbs(_projects.loadMyTasks(_currentProjectId, _loginId));
    
    task_project_name.text       = _cur_project.project_name;
    task_project_term.text       = _cur_project.start_date + ' 〜 ' + _cur_project.delivery_date;
    task_project_user_names.text = _cur_project.user_names;
}

/**
 * WBSデータをグリッドに反映
 */
private function displayWbs(array:Array):void
{
    mytask_list.dataProvider = array;
}

/**
 * WBSリスト行ダブルクリックでダイアログ表示
 */
private function showDialog(event:ListEvent=null):void
{
    var rowIndex:int = event.rowIndex ;
    //var prov = (wbs_tab.selectedChild.id == 'wbs_tag_wbs') ? wbs_list.dataProvider : mytask_list.dataProvider;
    var prov:Object = mytask_list.dataProvider;
    var data:Object = prov[rowIndex];
    
    switch (data.task_kbn) {
        case '3':// イベント
            showEventEdit(event);
            break;
        case '2':// マイルストーン
            showMilestoneEdit(event);
            break;
        case '1':// タスク
        default:
            showTaskEdit(event);
    }
}

/**
 * タスク追加ボタンクリック
 */
private function onClickAddTask():void
{
    showTaskEdit();
}
/**
 * マイルストーン追加ボタンクリック
 */
private function onClickAddMilestone():void
{
    showMilestoneEdit();
}
/**
 * イベント追加ボタンクリック
 */
private function onClickAddEvent():void
{
    showEventEdit();
}

/**
 * タスク追加ダイアログ表示
 */
private function showTaskEdit(event:ListEvent=null):void
{
    _editFlg = false;
    if (event) {
        _editFlg = true;
        var rowIndex:int = event.rowIndex;
        //var prov = (wbs_tab.selectedChild.id == 'wbs_tag_wbs') ? wbs_list.dataProvider : mytask_list.dataProvider;
        var prov:Object = mytask_list.dataProvider;
        _currentRecode  = prov[rowIndex];
    }
    
    var dlgEditTask:DialogEditTask = DialogEditTask(PopUpManager.createPopUp(this, DialogEditTask, true));
    dlgEditTask.title = (event) ? "タスクを編集する" : "タスクを追加する";
    dlgEditTask.setStyle("borderAlpha", 0.9);
    dlgEditTask.showCloseButton=true;
    
    PopUpManager.centerPopUp(dlgEditTask);
}

/**
 * マイルストーン追加ダイアログ表示
 */
private function showMilestoneEdit(event:ListEvent=null):void
{
    _editFlg = false;
    if (event) {
        _editFlg = true;
        var rowIndex:int = event.rowIndex ;
        //var prov = (wbs_tab.selectedChild.id == 'wbs_tag_wbs') ? wbs_list.dataProvider : mytask_list.dataProvider;
        var prov:Object  = mytask_list.dataProvider;
        _currentRecode   = prov[rowIndex];
    }
    var dlgEditMilestone:DialogEditMilestone = DialogEditMilestone(PopUpManager.createPopUp(this, DialogEditMilestone, true));
    dlgEditMilestone.title = (event) ? "マイルストーンを編集する" : "マイルストーンを追加する";
    dlgEditMilestone.setStyle("borderAlpha", 0.9);
    dlgEditMilestone.showCloseButton=true;

    PopUpManager.centerPopUp(dlgEditMilestone);
}

/**
 * イベント追加ダイアログ表示
 */
private function showEventEdit(event:ListEvent=null):void
{
    _editFlg = false;
    if (event) {
        _editFlg = true;
        var rowIndex:int = event.rowIndex ;
        //var prov = (wbs_tab.selectedChild.id == 'wbs_tag_wbs') ? wbs_list.dataProvider : mytask_list.dataProvider;
        var prov:Object  = mytask_list.dataProvider;
        _currentRecode   = prov[rowIndex];
    }
    var dlgEditEvent:DialogEditEvent = DialogEditEvent(PopUpManager.createPopUp(this, DialogEditEvent, true));
    dlgEditEvent.title = (event) ? "イベントを編集する" : "イベントを追加する";
    dlgEditEvent.setStyle("borderAlpha", 0.9);
    dlgEditEvent.showCloseButton=true;

    PopUpManager.centerPopUp(dlgEditEvent);
}



/**
 * タスク一覧の同期処理を行う
 * サーバにアクセスして現在ログイン中のユーザに関連するタスクを取得する
 */
private function syncTask():void
{
    _projects.connect(_databaseFile);
    var r:Object = _projects.loadSyncTaskData(_currentProjectId);
    var json:String = JSON.encode(r);
    
    _wbs_progress_bar = new WbsSyncProgress();
    PopUpManager.addPopUp(_wbs_progress_bar, this, true)
    PopUpManager.centerPopUp(_wbs_progress_bar);
    
    _service = new HTTPService();
    //_service.url = _serverUrl + "task/sync_air";
    _service.url = _serverUrl + "extensions/air/sync_task";
    _service.method = "POST";
    _service.addEventListener("result", syncTaskResult);
    _service.addEventListener("fault", syncTaskFault);
    
    var params:Object = new Object();
    params.json = json;
    // authorization parameters
    params.login_id = _localSo.data.user_login_id;
    params.password = _localSo.data.user_password;
    // request
    _service.send(params);
}

/**
 * タスク同期処理成功時コールバック
 * 取得したタスクをローカルデータベースに格納する．
 * 重複タスクは更新
 */
private function syncTaskResult(event:ResultEvent):void
{
    var json:String = String(event.result);
    var o:Object    = JSON.decode(json);
    
    _projects.connect(_databaseFile);
    _projects.syncLocalTaskData(o.result.dat_tasks);
    _projects.syncLocalProjectcompData(o.result.dat_projectcomps);
    _projects.syncLocalTaskUsersData(o.result.dat_taskusers);
    
    mytask_list.dataProvider = _projects.loadMyTasks(_currentProjectId, _loginId);
    
    Alert.show("タスクの同期が完了しました。", "完了!", Alert.OK);
    PopUpManager.removePopUp(_wbs_progress_bar);
}
/**
 * タスク同期処理失敗時コールバック
 */
private function syncTaskFault(event:FaultEvent):void
{
    //var faultstring:String = event.fault.faultString;
    //Alert.show(faultstring);
    Alert.show("タスクの同期に失敗しました。", "ERROR!", Alert.OK);
    PopUpManager.removePopUp(_wbs_progress_bar);
}

